package com.dbapp.imglib.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.dbapp.imglib.utils.JZImageLoader.Type;

public class JZViewHolder {
  private final SparseArray<View> mViews;
  private int mPosition;
  private View mConvertView;

  private JZViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
    this.mPosition = position;
    this.mViews = new SparseArray<View>();
    mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
    // setTag
    mConvertView.setTag(this);
  }

  /**
   * 拿到一个ViewHolder对象
   */
  public static JZViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId,
      int position) {
    JZViewHolder holder = null;
    if (convertView == null) {
      holder = new JZViewHolder(context, parent, layoutId, position);
    } else {
      holder = (JZViewHolder) convertView.getTag();
      holder.mPosition = position;
    }
    return holder;
  }

  public View getConvertView() {
    return mConvertView;
  }

  /**
   * 通过控件的Id获取对于的控件，如果没有则加入views
   */
  @SuppressWarnings("unchecked")
  public <T extends View> T getView(int viewId) {
    View view = mViews.get(viewId);
    if (view == null) {
      view = mConvertView.findViewById(viewId);
      mViews.put(viewId, view);
    }
    return (T) view;
  }

  /**
   * 为TextView设置字符串
   */
  public JZViewHolder setText(int viewId, String text) {
    TextView view = getView(viewId);
    view.setText(text);
    return this;
  }

  /**
   * 为ImageView设置图片
   */
  public JZViewHolder setImageResource(int viewId, int drawableId) {
    ImageView view = getView(viewId);
    view.setImageResource(drawableId);

    return this;
  }

  /**
   * 为ImageView设置图片
   */
  public JZViewHolder setImageBitmap(int viewId, Bitmap bm) {
    ImageView view = getView(viewId);
    view.setImageBitmap(bm);
    return this;
  }

  /**
   * 为ImageView设置图片
   */
  public JZViewHolder setImageByUrl(int viewId, String url) {
    JZImageLoader.getInstance(3, Type.LIFO).loadImage(url, (ImageView) getView(viewId));
    return this;
  }

  public int getPosition() {
    return mPosition;
  }
}
